package itheima.task;

import com.itheima.common.contants.RedisKeyConstants;
import com.itheima.common.fastdfs.FastDFSClientUtil;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.Set;

@Component
@Slf4j
public class ClearPicTask {

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private FastDFSClientUtil clientUtil;

    /**
     * cron表达式
     * 六个域
     *  秒     分     时    日     月      周
     * 0-59  0-59  0-23  1-31   1-12    1-7
     * 特殊字符的含义：
     *       *  ：  任意
     *       ?  :   弃用   【只能作用在日和周上，一定会有一个不用】
     *       -  :   范围   0-5 ==>  0 1 2 3 4 5
     *       ,  :   指定值   1,,5,8,9
     *       /  :   间隔    0/5   0 5 15 20 25 30
     *       L  :   表示最后一天  只能出现在周或月上
     *       W  : 表示有效工作日   只鞥呢出现在天和月上
     *       LW : 表示某月的最后一个星期五
     *
     *       每天的凌晨 0时 0分 0秒
     *       cron = "0 0 0 * * ?"
     *       每月1号中午12点执行每隔5分钟一次
     *       cron= "0 0/5 12 1 * ?"
     *
     *   定时清理垃圾图片
     */
//    @Scheduled(cron = "0 0 3 * * ?")
    @XxlJob("clearPic")
    public void clearGarbagePicture(){

        //intersect  求交集
        //union   求并集
        //difference  求差集
        Set<String> pics = redisTemplate.opsForSet().difference(RedisKeyConstants.ALL_PIC, RedisKeyConstants.USE_PIC);
        log.info("定时任务开始执行，需要清理的图片有" + pics);
        for (String pic : pics){
            clientUtil.delFile(pic);
            //保持数据一致性
            redisTemplate.boundSetOps(RedisKeyConstants.ALL_PIC).remove(pic);
        }

    }

}
